home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 25: Programming / pc_actual_25.iso / Delphi / Duck Report / _SETUP.1 / DQAddTable.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-01-17  |  7.3 KB  |  301 lines

  1. unit DQAddTable;
  2. {$I DQuery.inc}
  3.  
  4. interface
  5.  
  6. uses
  7.     {$IFDEF WIN32}
  8.         Windows,
  9.     {$ELSE}
  10.         WinTypes, WinProcs,
  11.     {$ENDIF}
  12.   Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  13.   ExtCtrls, StdCtrls, Buttons, DB, DBTables, dclDQuery;
  14.  
  15. type
  16.   TFormDQAddTable = class(TForm)
  17.     LDB: TLabel;
  18.     Label2: TLabel;
  19.     LBTable: TListBox;
  20.     Label3: TLabel;
  21.     EAlias: TEdit;
  22.     BBAdd: TBitBtn;
  23.     BBClose: TBitBtn;
  24.     BBHelp: TBitBtn;
  25.     BBDataBaseFile: TBitBtn;
  26.     OpenDBDlg: TOpenDialog;
  27.     BBBrow: TButton;
  28.     CBDatabase: TComboBox;
  29.     procedure FormCreate(Sender: TObject);
  30.     procedure FormDestroy(Sender: TObject);
  31.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  32.     procedure BBCloseClick(Sender: TObject);
  33.     procedure CBDatabaseChange(Sender: TObject);
  34.     procedure LBTableClick(Sender: TObject);
  35.     procedure FormShow(Sender: TObject);
  36.     procedure BBAddClick(Sender: TObject);
  37.     procedure LBTableDblClick(Sender: TObject);
  38.     procedure BBHelpClick(Sender: TObject);
  39.     procedure BBDataBaseFileClick(Sender: TObject);
  40.     procedure BBBrowClick(Sender: TObject);
  41.   private
  42.       Procedure    LoadDB (Items: TStrings);
  43.      Function        GetDataBaseSt: String;
  44.      Procedure    LoadTable (clString: TStrings; StDataBase: String;
  45.                      ExtSession: TSession; Pattern: String;
  46.                  Extensions, SystemTables: Boolean);
  47.   public
  48.         StDataBase:    String;
  49.         StTable:        String;
  50.      StAlias:        String;
  51.      EveneAdd:    TNotifyEvent;
  52.      CStAlias:    TStrings;
  53.      bMultiDB:    Boolean;     
  54.         Procedure    SetData (p_StDataBase, p_StTable, p_StAlias: String);
  55.     { Public declarations }
  56.   end;
  57.  
  58. var
  59.   FormDQAddTable: TFormDQAddTable;
  60.   DBItem:            Integer;
  61.  
  62. implementation
  63.  
  64. {$R *.DFM}
  65. Uses DQViewData;
  66. Procedure TFormDQAddTable.LoadDB (Items: TStrings);
  67. Var
  68.     i:                Integer;
  69.   st:            String;
  70.     DataBase:    TDataBase;
  71.   iCount:        Integer;
  72. Begin
  73.     Items.Clear;
  74.     Session.GetAliasNames (CStAlias);
  75.     Items.BeginUpdate;
  76.     i            := 0;
  77.     iCount    := CStAlias.Count;
  78.     While (i < iCount) Do
  79.     Begin
  80.         St    := Session.GetAliasDriverName (CStAlias.Strings[i]);
  81.      if St <> '' Then
  82.          St    := CStAlias.Strings[i] + '    (' + St + ')'
  83.      Else
  84.          St    := CStAlias.Strings[i];
  85.      Items.Add (St);
  86.      Inc (i);
  87.   End;
  88.   Items.EndUpdate;
  89. End;
  90. Function TFormDQAddTable.GetDataBaseSt: String;
  91. Begin
  92.     Result    := '';
  93.     if CBDatabase.ItemIndex >= 0 Then
  94.         Result    := CStAlias.Strings[CBDatabase.ItemIndex];
  95. End;
  96. Procedure TFormDQAddTable.LoadTable (clString: TStrings; StDataBase: String;
  97.                      ExtSession: TSession; Pattern: String;
  98.                  Extensions, SystemTables: Boolean);
  99. Var
  100.     Cursor:        TCursor;
  101. Begin
  102.     clString.Clear;
  103.     if StDataBase = '' Then Exit;
  104.     clString.BeginUpdate;
  105.   Cursor            := Screen.Cursor;
  106.   Screen.Cursor    := crHourGlass;
  107.   if Pattern = '' Then
  108.       Pattern    := '*.*';
  109.     Try
  110.         Session.GetTableNames (StDataBase, Pattern, Extensions, SystemTables, clString);
  111.     Finally
  112.         Screen.Cursor := Cursor;
  113.         clString.EndUpdate;
  114.   End;
  115. End;
  116. Procedure TFormDQAddTable.FormCreate(Sender: TObject);
  117. Begin
  118.     CStAlias    := TStringList.Create;
  119.  
  120.     LoadDB (CBDatabase.Items);
  121.     StDataBase    := '';
  122.     StTable        := '';
  123.     StAlias        := '';
  124.   bMultiDB        := TRUE;
  125. End;
  126. Procedure TFormDQAddTable.FormShow(Sender: TObject);
  127. Var
  128.   Form:    TForm;
  129. Begin
  130.     Top    :=    Screen.Height - Self.Height;
  131.   Left    := (Screen.Width div 2) - (Self.Width div 2);
  132.   Form    := nil;
  133.     if Application <> nil Then
  134.       if Application.MainForm <> nil Then
  135.           Form    := Application.MainForm;
  136.  
  137.   CBDatabase.Visible    := bMultiDB;
  138.     LDB.Visible                := bMultiDB;
  139.   
  140.     if StDataBase <> '' Then
  141.       CBDatabase.ItemIndex    := CStAlias.IndexOf (StDataBase)
  142.   Else
  143.         if CBDatabase.Items.Count > 0 Then
  144.               CBDatabase.ItemIndex    := DBItem
  145.       Else
  146.           CBDatabase.ItemIndex    := -1;
  147.     CBDatabaseChange (nil);
  148.   if StTable <> '' Then
  149.   Begin
  150.       LBTable.ItemIndex    := LBTable.Items.IndexOf (StTable);
  151.      if LBTable.ItemIndex >= 0 Then
  152.      Begin
  153.          EAlias.Text        := StAlias;
  154.           EAlias.Enabled    := FALSE;
  155.           EAlias.Color    := clSilver;
  156.      End;
  157.   End;
  158. End;
  159. Procedure TFormDQAddTable.FormDestroy(Sender: TObject);
  160. Begin
  161.   FormDQAddTable    := nil;
  162.   CStAlias.Free;
  163. End;
  164. Procedure TFormDQAddTable.FormClose(Sender: TObject; var Action: TCloseAction);
  165. Begin
  166.     Action    := caFree;
  167. End;
  168. Procedure TFormDQAddTable.CBDatabaseChange(Sender: TObject);
  169. Var
  170.     St:            String;
  171. Begin
  172.     St    := GetDataBaseSt;
  173.  
  174.     LoadTable (LBTable.Items, St, nil, '', FALSE, TRUE);
  175.  
  176.     if LBTable.Items.Count > 0 Then
  177.       LBTable.ItemIndex    := 0
  178.   Else
  179.       LBTable.ItemIndex    := -1;
  180.     LBTableClick (nil);
  181. End;
  182. Procedure TFormDQAddTable.LBTableClick (Sender: TObject);
  183. Var
  184.     St:        String;
  185.   StTemp:    String;
  186.   iPos:        Integer;
  187. Begin
  188.     if LBTable.ItemIndex < 0 Then Exit;
  189.     St        := LBTable.Items.Strings[LBTable.ItemIndex];
  190.   iPos    := Pos ('.', St);
  191.   if iPos > 1 Then
  192.   Begin
  193.       StTemp    := Copy (St, iPos, Length (St) - iPos + 1);
  194.         StTemp    := UpperCase (StTemp);
  195.      if (StTemp = '.DBF') or (StTemp = '.DB') Then
  196.             St            := Copy (St, 1, iPos - 1)
  197.      Else
  198.             St            := DQCutCharInString (St, ' .');
  199.   End
  200.   Else
  201.       St            := DQCutCharInString (St, ' .');
  202.     EAlias.Text    := St;
  203. End;
  204. Procedure TFormDQAddTable.LBTableDblClick(Sender: TObject);
  205. Begin
  206.     BBAddClick (nil);
  207. End;
  208. Procedure TFormDQAddTable.BBCloseClick(Sender: TObject);
  209. Begin
  210.     DBItem    := CBDatabase.ItemIndex;
  211.     Close;
  212.   ModalResult    := mrCancel;
  213. End;
  214. Procedure TFormDQAddTable.BBAddClick(Sender: TObject);
  215. Var
  216.     St:    String;
  217. Begin
  218.     StDataBase    := GetDataBaseSt;
  219.   StTable        := LBTable.Items.Strings[LBTable.ItemIndex];
  220.     StAlias        := EAlias.Text;
  221.   St                := Session.GetAliasDriverName (StDataBase);
  222.   {$IFDEF VERIFY_MSACCESS}
  223.   if St = 'MSACCESS' Then
  224.   Begin
  225.       bMultiDB                    := FALSE;
  226.      CBDatabase.Visible    := bMultiDB;
  227.         LDB.Visible                := bMultiDB;
  228.   End;
  229.   {$ENDIF}
  230.  
  231.     if Assigned (EveneAdd) Then
  232.         EveneAdd(Self)
  233.   Else
  234.   Begin
  235.       Close;
  236.       ModalResult    := mrOK;
  237.   End;
  238. End;
  239. Procedure TFormDQAddTable.BBHelpClick(Sender: TObject);
  240. Begin
  241.     Beep;
  242. End;
  243. Procedure TFormDQAddTable.BBDataBaseFileClick(Sender: TObject);
  244. Var
  245.     St:        String;
  246.   iTemp:    Integer;
  247. Begin
  248.     Visible    := FALSE;
  249.     if OpenDBDlg.Execute Then
  250.   Begin
  251.         St                := OpenDBDlg.FileName;
  252.         StDataBase    := ExtractFilePath (St);
  253.         StTable        := ExtractFileName (St);
  254.      StAlias        := StTable;
  255.      St                := ExtractFileExt (StTable);
  256.      iTemp            := Length (St);
  257.         Delete (StAlias, Length (StTable) - iTemp + 1, iTemp);
  258.         if Assigned (EveneAdd) Then
  259.             EveneAdd(Self);
  260.   End;
  261.   Close;
  262.     ModalResult    := mrOK;
  263. End;
  264. Procedure TFormDQAddTable.SetData (p_StDataBase, p_StTable, p_StAlias: String);
  265. Begin
  266.     StDataBase    := p_StDataBase;
  267.     StTable        := p_StTable;
  268.     StAlias        := p_StAlias;
  269. End;
  270. Procedure TFormDQAddTable.BBBrowClick(Sender: TObject);
  271. Var
  272.     StDataBase:    String;
  273.   StTable:        String;
  274.   Table:        TTable;
  275. Begin
  276. // Duck
  277.     StDataBase    := GetDataBaseSt;
  278.     StTable        := LBTable.Items.Strings[LBTable.ItemIndex];
  279.   Table            := TTable.Create (Self);
  280.   Table.ReadOnly            := TRUE;
  281.   {$IFDEF WIN32}
  282.         Table.SessionName        := Session.SessionName;
  283.     {$ENDIF}
  284.  
  285.   Table.DatabaseName    := StDataBase;
  286.     Table.TableName        := StTable;
  287.   Try
  288.       Table.Active            := TRUE;
  289.  
  290.         FormDQViewData    := TFormDQViewData.Create (Self);
  291.       FormDQViewData.DataSource.DataSet    := Table;
  292.         FormDQViewData.ShowModal;
  293.   Finally
  294.       Table.Active            := FALSE;
  295.       Table.Free;
  296.   End;
  297. End;
  298. Initialization
  299.     DBItem    := 0;
  300. End.
  301.